package com.linwen.excise.od.C;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @ClassName _传递悄悄话
 * @Description TODO
 * @Author zero
 * @DATE 2024/4/5 1:51 AM
 * @Version 1.0
 */
public class _传递悄悄话 {

    /**
 给定一个二叉树，每个节点上站着一个人，节点数字表示父节点到该节点传递悄悄话需要花费的时间。
初始时，根节点所在位置的人有一个悄悄话想要传递给其他人，求二叉树所有节点上的人都接收到悄悄话花费的时间。
     **/

    public static int result = 0;
    public static void main(String[] args) {
        Node node = new Node(0);
        Node node1 = new Node(9);
        Node node2 = new Node(20);
        node.setLeft(node1);
        node.setRight(node2);
        Node node3 = new Node(15);
        node2.setLeft(node3);
        Node node4 = new Node(7);
        node2.setRight(node4);
        Node node5 = new Node(3);
        node3.setLeft(node5);
        Node node6 = new Node(2);
        node3.setRight(node6);
        System.out.println(maxLength(node));

    }

    private static int maxLength(Node node) {
        if(node==null) {
            return 0;
        }
        maxLength(node,0);
        return result;
    }

    private static void maxLength(Node node, int i) {
        if(node.left==null&&node.right==null) {
            result = Math.max(result,i+node.value);
            return;
        }
        maxLength(node.left,i+node.value);
        maxLength(node.right,i+node.value);
    }


}
class Node{
    int value = 0;
    Node left = null;
    Node right = null;
    public Node(int value){
        this.value = value;
    }
    public void setLeft(Node left){
        this.left = left;
    }
    public void setRight(Node right){
        this.right = right;
    }
}
